package etude.collecteur;

//**************************** Execution *****************************//
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;

import etude.collecteur.impl.AnalyzeurFile;
import etude.collecteur.impl.CollectorFile;
import etude.collecteur.impl.WriterFile;

/**
 * Class permettant l'execution du fichier.
 * @author anthonyestebe
 *
 */
public class Execution {
	
/**
 * programme d'execution.
 * @param args
 * 
 */
	public static void main(String[] args) {
		// vérification de ses arguments. 
		
		if(args.length==6){		
		
			// Paramétrage.
			String nom_du_fichier = args[0];
			String adresse = args[1];
			String username = args[2];
			String password = args[3];
			String delais = args[4];
			String periode = args[5];
        
			File f;
			// Déclaration variables pour rendre péridoique.
			// ne pas oublier que les delais sont en ms.
			long delay = 0; 
			long delay2 = Long.valueOf(delais);
			long period = Long.valueOf(periode);
        
			URL urlconsole;
			try {
				urlconsole = new URL(adresse);
			} catch (MalformedURLException malformed) {
				// TODO: gérer le retour utilisateur sur le paramètrage incorrect
				// permet d'arreter le programme est d'afficher le message d'erreur. 
				throw new IllegalArgumentException("l'adresse est incorrecte", malformed);
			} 
		
			Timer monTimer = new Timer();
		
			// Instanciation des collaborateurs
			CreateFile monFichier = new CreateFile();
			TaskCreateFile monTraitementCreationFichier = new TaskCreateFile(monFichier);
			f = monTraitementCreationFichier.creationDeFichier(nom_du_fichier);
		
			Collector collector = new CollectorFile(urlconsole,username,password);
			Analyzeur analyzeur = new AnalyzeurFile(); 
			Writer writer = new WriterFile(f) ;
		
			Task monTraitement = new Task(analyzeur, collector, writer);
			TaskStop monStop = new TaskStop(monTimer);

			TimerTask maTask = new PeriodicTask(monTraitement);

			// Execution de la tahce periodiquement
			monTimer.scheduleAtFixedRate(maTask, delay, period);
			monTimer.schedule(monStop, delay2);
		}
		
		else{
			System.out.println("Il n'y a pas le bon nombre d'argument. Vous avez rentré : "+args.length+" arguments au lieu de 6");
			System.out.println(" arg 0 : le nom du fichier dans lequel on va collecter les fichiers ");
			System.out.println(" arg 1 :l'adresse URL du site");
			System.out.println(" arg 2 : l'username du site ");
			System.out.println(" arg 3 : le password associé");
			System.out.println(" arg 4 : le delais de fin d'exécution en ms");
			System.out.println(" arg 5 : la préidoe d'éxecution");
			
			for(int i = 0; i<6; i++){
				if (args[i]==null){
					System.out.println("l'argument n°: "+i+" n'est pas renseingé");
				}
			}
		}
	}
}